import junit.framework.TestCase;


public class ParserTest extends TestCase {
	public void testReadToken() {

		System.out.println(Parser.readToken(new SchavaReader("word")));
		System.out.println(Parser.readToken(new SchavaReader("1234")));
		System.out.println(Parser.readToken(new SchavaReader("3.14")));
		System.out.println(Parser.readToken(new SchavaReader("3.14.foo")));
		System.out.println(Parser.readToken(new SchavaReader("one two")));
		System.out.println(Parser.readToken(new SchavaReader("'quoted")));
		System.out.println(Parser.readToken(new SchavaReader("\"string\"")));
		System.out.println(Parser.readToken(new SchavaReader("\"string\" and words")));
		System.out.println(Parser.readToken(new SchavaReader("\"string\" and words")));
		System.out.println(Parser.readToken(new SchavaReader("(list)")));
		System.out.println(Parser.readToken(new SchavaReader("'(quoted list)")));
		System.out.println(Parser.readToken(new SchavaReader("(long list of words and 3 numbers)")));
		System.out.println(Parser.readToken(new SchavaReader("(non quoted list)")));
		System.out.println(Parser.readToken(new SchavaReader("'(quoted list)")));
		System.out.println(Parser.readToken(new SchavaReader("((unquoted deep) list)")));
		System.out.println(Parser.readToken(new SchavaReader("(unquoted (deep) list)")));
		System.out.println(Parser.readToken(new SchavaReader("'(quoted (deep) list)")));
		System.out.println(Parser.readToken(new SchavaReader("'(quoted 1 2 3)")));
		System.out.println(Parser.readToken(new SchavaReader("(1 2 3 unquoted)")));
		System.out.println(Parser.readToken(new SchavaReader("!")));
		System.out.println(Parser.readToken(new SchavaReader("set!")));
		try {
			System.out.println(Parser.readToken(new SchavaReader("(set!")));
		} catch (UnfinishedLineException e) {
		}
		
	}
//	
//	public void testGetRestIndex() {
//		assertTrue(Parser.getRestIndex("") == 0);
//		assertTrue(Parser.getRestIndex("a") == 1);
//		assertTrue(Parser.getRestIndex("a)") == 1);
//		assertTrue(Parser.getRestIndex("(a)") == 3);
//		assertTrue(Parser.getRestIndex("a") == 1);
//		assertTrue(Parser.getRestIndex("a b") == 1);
//		assertTrue(Parser.getRestIndex("2 3") == 1);
//		assertTrue(Parser.getRestIndex("ad b") == 2);
//		assertTrue(Parser.getRestIndex("a b") == 1);
//		assertTrue(Parser.getRestIndex("a (b)") == 1);
//		assertTrue(Parser.getRestIndex("2 ((3 b) 4)") == 1);
//		assertTrue(Parser.getRestIndex("(2 ((3 b) 4))") == 13);
//		assertTrue(Parser.getRestIndex("+3(2 ((3 b) 4))") == 2);
//		assertTrue(Parser.getRestIndex("3+(2 ((3 b) 4))") == 1);
//		assertTrue(Parser.getRestIndex("32+(2 ((3 b) 4))") == 2);
//		assertTrue(Parser.getRestIndex("!@#$%67 90") == 7);
//	}
//	
//	public void testListify() {
//		Data d;
//		d = Parser.listify("3");
//		assertTrue(d.toString().equals("3"));
//		d = Parser.listify("a");
//		assertTrue(d.toString().equals("a"));
//		d = Parser.listify("(a b)");
//		assertTrue(d.toString().equals("(a b)"));
//		d = Parser.listify("(a . (b))");
//		assertTrue(d.toString().equals("(a b)"));
//		d = Parser.listify("((a) b)");
//		assertTrue(d.toString().equals("((a) b)"));
//		d = Parser.listify("((a b))");
//		assertTrue(d.toString().equals("((a b))"));
//		d = Parser.listify("((a b) (c (d) e f (g) ) (c) d)");
//		assertTrue(d.toString().equals("((a b) (c (d) e f (g)) (c) d)"));
//		d = Parser.listify("(cons '(10) '(23))");
//		System.out.println(d);
////		assertTrue(d.toString().equals("(cons '(10) '(23)"));
//		
//		d = Parser.listify("(if (= x 0) 1 (* x (f f (- x 1))))");
//		System.out.println(Parser.listify("g 3 k ((a b) (c (d) e f (g) ) (c) d)"));
//		boolean fail = false; 
//		try {
//			d = Parser.listify("((+ 2 3) . ( 4 ) 5)");
//		} catch (Exception e) {
//			fail = true;
//		}
//		assertTrue(fail);
//	}
//	
//	public void testIsSymbol() {
//		assertTrue(Parser.isSymbol("a)"));
//		assertTrue(Parser.isSymbol("b"));
//		assertTrue(Parser.isSymbol("@"));
//		assertTrue(Parser.isSymbol("##"));
//		assertTrue(Parser.isSymbol("+"));
//		assertTrue(Parser.isSymbol("-"));
//		assertFalse(Parser.isSymbol("("));
//		assertFalse(Parser.isSymbol(")"));
//		assertFalse(Parser.isSymbol("3"));
//		
//		
//	}
}
